Sesión : Visualización de datos
Taller de Investigación: Política Cuantitativa “CUANTIPOL” - UNMSM
Descarguemos e importemos la data:
El Barómetro de las Américas es el proyecto más conocido de LAPOP. Este estudio es un estudio comparativo científicamente de valores y comportamientos democráticos que cubre todos los países independientes de América del Norte, Central y del Sur, así como un número significativo de países del Caribe. El trabajo de LAPOP en el Barómetro de las Américas incluye el diseño de encuestas, el diseño de muestras, la prueba previa cualitativa e iterativa de nuevos módulos, la auditoría de datos, el análisis y la elaboración de informes.
Utilizaremos la siguiente data del 2021 de Vanderbilt University para utilizar las principales funciones dentro de Tidyverse y las más útiles para nuestro trabajo en el taller.
- En este caso, todo se encuentra en la carpeta de la clase.
Instalamos y corremos los paquetes y librerías que utilizaremos:
pacman::p_load(haven, # Import foreign statistical formats
janitor, # Tools for examining and cleaning dirty data
plotly, # Interactive web-based graph
ggplot2, # To map variables to aesthetics
tidyverse # Packages and tools for the R programming
)df_lapop <- read_stata("https://github.com/Taller-UNMSM-CUANTIPOL-2023/Visualizacion-de-datos/raw/main/documentos/PER_2021_LAPOP.dta") |>
clean_names() # Takes and returns a data.frame clean
#names(df_lapop) # Nombre de las variables del df
#str(df_lapop) # Estructura del df, tipo de variables
#class(df_lapop) # Tipo del vectorggplot2
Este paquete sirve para crear gráficos basados en la data seleccionada. También se le puede indicar una serie de parámetros como el color y tipo de letra, los títulos de los gráficos y más características que se indican con los comando.
Recordemos:
Variable categórica nominal: jc15a & q1tb
JC15A. ¿Cree usted que cuando el país enfrenta momentos muy difíciles, se justifica que el presidente del país cierre el Congreso y gobierne sin Congreso?
#str(df_lapop$jc15a)
#table(df_lapop$jc15a) # 1: 640, 2: 821
#sum(is.na(df_lapop$jc15a)) # Advertimos NA's: 1577
df_congre <- df_lapop |>
filter(!is.na(jc15a)) |> # Borramos NA's de la columna
mutate(disolucion_c = as.factor(jc15a)) |>
mutate(disolucion_c = factor(disolucion_c, levels = levels(disolucion_c),
labels = c("Si","No")))Subseteamos solo la variable y la sobreescribiremos en la misma data:
df_congre <- df_congre |>
group_by(disolucion_c) |>
count() |>
ungroup() |>
mutate(pcnt = n / sum(n)) |> # Creamos una columna de proporción
arrange(pcnt) |> # Oderna descendentemente
mutate(etiquetas = scales::percent(pcnt)) # Otra columna con el porcentajeRecordemos…
usamos el pipe operator
|>como un “conector”, es útil pensarlo como un ” y luego”.creamos un dataframe llamado “df”,Agrupamos los datos por la variable “sex”;
Contamos la frecuencia de las categorias de sex, es decir, Hombre-Mujer en esta base de datos;
Desgrupamos la data para que no afecté el siguiente paso;
Usamos mutate para crear la variable pcnt en la cual vamos a dividir n(cantidad de observaciones en cada categoría)/ la suma total de observaciones de la muestra;
ordenamos la variable creada de menor a mayor;
creamos otra variable llamada etiqueta en donde generamos los porcentajes de cada categoria según la cantidad de observaciones en cada una.
bp = ggplot(df_congre, aes(x = reorder(disolucion_c, n), y = n,
fill = disolucion_c)) +
geom_bar(stat = "identity") + # Data precalculada (transformación estadistica)
scale_fill_brewer(palette = "Paired") + # Color de las barras
coord_flip() +
labs(x = "", y = "Cantidad de entrevistadxs",
title = "Entrevistadxs según si justifica el cierre del congreso",
subtitle = "", caption = "LAPOP, PERU 2021",
fill = "¿Disolución del Congreso?") + # Leyenda
theme(plot.title = element_text(hjust = 0.8)) + # Centrar Título
theme(panel.background = element_rect(fill = "white", colour = "white")) +
geom_text(aes(label = etiquetas), vjust = 1.5, color = "Black", size = 5)
#bp
ggplotly(bp)Entrevistados según la justificación del cierre del congreso.
Q1TB. Para fines estadísticos, ¿me podría por favor decir cuál es su género?
#str(df_lapop$q1tb)
#table(df_lapop$q1tb) # 1: 1617, 2: 1418, 3: 3
# Eliminando casos perdidos:
sum(is.na(df_lapop$q1tb)) # NA's: 0[1] 0
df_sex <- df_lapop |>
filter(!is.na(q1tb)) |> # Borramos NA's de la columna
mutate(sex = as.factor(q1tb)) |>
mutate(sex = factor(sex, levels = levels(sex),
labels = c("Hombre","Mujer", "Otro")))df_pc <- df_sex |>
group_by(sex) |>
count() |>
ungroup() |>
mutate(pcnt = n / sum(n)) |>
arrange(pcnt) |>
mutate(etiquetas = scales::percent(pcnt)) GRAFICO DE SECTORES (PIE CHART)
pc = ggplot(df_pc, aes(x = "", y = pcnt, fill = sex)) +
geom_col(width = 1, color = "white") + # Para los bordes
geom_label(aes(label = etiquetas), position = position_stack(vjust = 0.5),
show.legend = FALSE) +
coord_polar("y", start = 0) + # Para convertir la barra en circulo
theme_void() + # Borra todo lo que esta alrededor del grafico
guides(fill = guide_legend(title = "sexo")) +
scale_fill_brewer(palette = "Paired") + # Color del gráfico
labs(x = "", y = "Cantidad de encuestadxs",
title = "Encuestadxs según sexo",
subtitle = "", caption = "LAPOP, PERU 2021",
fill = "¿Disolución del Congreso?")
# Agregamos el título
pcpc2 <- plot_ly(df_pc,
labels = ~ sex,
values = ~ pcnt,
type = 'pie')
pc2 <- pc2 |>
layout(title = 'Grafico Dinámico Pie',
xaxis = list(showgrid = FALSE,
zeroline = FALSE,
showticklabels = FALSE),
yaxis = list(showgrid = FALSE,
zeroline = FALSE,
showticklabels = FALSE))
pc2Variable Categórica ordinal: m1
M1. Hablando en general acerca del gobierno actual, ¿diría usted que el trabajo que está realizando el Presidente Francisco Sagasti es…?:
- Percepción respecto a la labor del presidente Vizcarra…
#str(df_lapop$m1)
#table(df_lapop$m1) # 1: 640, 2: 821
#sum(is.na(df_lapop$m1)) # Advertimos NA's: 1577
df_pre <- df_lapop |>
filter(!is.na(m1)) |> # Borramos NA's de la columna
mutate(percepcion = as.factor(m1)) |>
mutate(percepcion = factor(percepcion, levels = levels(percepcion),
labels = c("Muy bueno", "Bueno", "Regular",
"Malo", "Muy malo"), ordered = T))
#table(df_pre$percepcion)
#str(df_pre$percepcion)Subseteamos solo la variable y la sobreescribiremos en la misma data:
df_pre <- df_pre |>
group_by(percepcion) |>
count() |>
ungroup() |>
mutate(pcnt = n / sum(n)) |> # Creamos una columna de proporción
arrange(pcnt) |> # Oderna descendentemente
mutate(etiquetas = scales::percent(pcnt)) # Otra columna con el porcentaje
#df_preGráfica Pie: percepcion
Gráfica de barras: percepcion
bp2 = ggplot(df_pre, aes(x = reorder(percepcion, n), y = n,
fill = percepcion)) +
geom_bar(stat = "identity") + # Data precalculada (transformación estadistica)
scale_fill_brewer(palette = "Paired") + # Color de las barras
coord_flip() +
labs(x = "Categorías", y = "Frecuencias",
title = "Entrevistadxs según su percepción de la labor del presidente",
subtitle = "", caption = "LAPOP, PERU 2021",
fill = "Nivel de percepción:") + # Leyenda
theme(plot.title = element_text(hjust = 0.8)) + # Centrar Título
theme(panel.background = element_rect(fill = "white", colour = "white")) +
geom_text(aes(label = etiquetas), vjust = 1.5, color = "Black", size = 5)
#bp2
ggplotly(bp2)rownames(df_pre) = df_pre$n # Etiquetas Boxplot
#boxplot(df_pre$m1) # Boxplot basico de R
bp3 <- ggplot(df_pre, aes(x = "", y = percepcion, color = "")) +
geom_boxplot(outlier.shape = NA) +
coord_flip() + # Volteamos el gráfico
scale_fill_brewer(palette = "Paired") +
theme(legend.position = "top", axis.text.y = element_blank(),
panel.background = element_rect(fill = "white",
colour = "white")) + # Quitamos categorías
geom_jitter(width = 0.5,
colour = 2 ,
shape = 17,
size = 1) + # Agregamos los casos como puntos
labs(title = "Percepción de satisfacción respecto a la labor del presidente Vizcarra",
x = "", y = "Percepción")
bp3
ggplotly(bp3) # Boxplot dinámicoINTERPRETACION:
- La mayoría de personas considera que la labor del presidente Vizcarra ha sido regular.
- El 2.90% de las personas considera que la labor del presidente vizcarra ha sido muy mala, mientras que el 3.79 considera que fue muy buena. En particular, el 50.27% de los encuestados, es decir, la mayoría considera que su labor fue regular.
Variable númerica: confi_ins
Creación del indicador confianza en las instituciones en el Perú:
Definir qué es un sistema politico
qué significa confianza
Luego las personas que realizan las encuestas, a traves de una serie preguntas van a medir dicho concepto. ¿cómo resumir dichas preguntas en un numero? - Indice aditivo: sumar las variables.
Definimos las variables que conforman el indicador de confianza en las instituciones…
B13. ¿Hasta qué punto tiene confianza usted en el Congreso? 49
B21. ¿Hasta qué punto tiene confianza usted en los partidos políticos? 51
B32. ¿Hasta qué punto tiene usted confianza en su municipalidad? 52
B47A. ¿Hasta qué punto tiene usted confianza en las elecciones en este país? 54
df_lapop[, c(49, 51, 52, 54)] = lapply(df_lapop[, c(49, 51, 52, 54)], as.numeric) # Convertimos a v. númericas
# Visualizamos un resumen estadistico de cada variable:
df_lapop |>
select(b13, b21, b32, b47a) |>
summary() b13 b21 b32 b47a
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2.000
Median :2.000 Median :2.000 Median :3.000 Median :4.000
Mean :2.297 Mean :2.214 Mean :3.117 Mean :3.616
3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:5.000
Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
NA's :2280 NA's :2272 NA's :1542 NA's :1542
#df_lapop$confi_ins = df_lapop$b13 + df_lapop$b21 + df_lapop$b32 + df_lapop$b47a
df_lapop <- df_lapop |>
mutate(confi_ins = b13 + b21 + b32 + b47a)
summary(df_lapop$confi_ins) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
4.00 7.00 10.00 11.12 15.00 27.00 2650
df_lapop$confi_ins = ((df_lapop$confi_ins - 4) / 23) * 100
# Restamos el mínimo y divimos entre el máximo ya restado
# y finalmente se multiplica * 100: (Indice aditivo de 0 a 100)
#Resumen del indicador:
summary(df_lapop$confi_ins) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.00 13.04 26.09 30.94 47.83 100.00 2650
HISTOGRAMA: confi_ins
h <- ggplot(df_lapop, aes(x = confi_ins, color = 1)) +
geom_histogram(breaks = seq(100), fill = "blue",
alpha = 0.5, position = "identity") +
labs(title = "Confianza en la instituciones", y = "", x = "Index",
subtitle = "", caption = "LAPOP 2021") +
theme(plot.title = element_text(hjust = 0.5)) +
theme(panel.background = element_rect(fill = "white", colour = "white")) +
geom_vline(aes(xintercept = mean(confi_ins, na.rm = T)),
color = "blue",
linetype = "dashed",
size = 1)
h ggplotly(h)BOXPLOT: confi_ins
bp2 <- ggplot(df_lapop, aes(x = "", y = confi_ins, color = "")) +
geom_boxplot(utlier.shape = NA) +
coord_flip() +
theme(legend.position = "top", axis.text.y = element_blank(),
panel.background = element_rect(fill = "white", colour = "white")) +
geom_jitter(width = 0.2,
color = 2,
shape = 17,
size = 1) +
labs(title = "El apoyo al sistema político según el sexo", x = "", y ="Index",
subtitle = "", caption = "@luccemhu")
#bp2
ggplotly(bp2)Y si agregamos… sex: q1tb
#df_lapop$q1tb <- as.factor(df_lapop$q1tb)
#bp2 <- ggplot(df_lapop, aes(x = q1tb, y = confi_ins, color = q1tb))